package com.kanshu.basictest.widget.adapter.recycler;

import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import androidx.recyclerview.widget.RecyclerView;

/**
 * LayoutManager主要用于布局其中的Item，在LayoutManager中能够对每个Item的大小，位置进行更改
 */
public class CustomLayoutManager extends RecyclerView.LayoutManager {

    public static final String TAG = "CustomLayoutManager";

    /**
     * 若是想修改子Item的布局参数（比如：宽/高/margin/padding等等），那么可以在该方法内进行设置。
     * 一般来说，没什么特殊需求的话，则可以直接让子item自己决定自己的宽高即可（wrap_content）。
     */
    @Override
    public RecyclerView.LayoutParams generateDefaultLayoutParams() {
        return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    }


    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        int offsetY = 0;
        for (int i = 0; i < getItemCount(); i++) {
            View view = recycler.getViewForPosition(i);
            addView(view);
            measureChildWithMargins(view, 0, 0);
            int width = getDecoratedMeasuredWidth(view);
            int height = getDecoratedMeasuredHeight(view);
            layoutDecorated(view, 0, offsetY, width, offsetY + height);
            offsetY += height;
        }
    }

    @Override
    public boolean canScrollVertically() {
        return true;
    }

    @Override
    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
        //dy:表示滑动的距离（像素）
        //当手指由下往上滑时（往上滚动）,dy>0；当手指由上往下滑时（往下滚动）,dy<0
        Log.e(TAG, "scrollVerticallyBy:dy=" + dy);
        offsetChildrenVertical(-dy);
        return dy;
    }
}
